//对axios进行二次封装( 实例化axios对象, 设置请求拦截器, 设置响应拦截器 )

import axios from 'axios'

// 在开发环境下, process.env.REACT_APP_BASE_URL 会自动找 .env.development 文件中的变量.
// 在生产环境下, process.env.REACT_APP_BASE_URL 会自动找 .env.production 文件中的变量.

// 开发环境下 代理文件 setupProxy.js 会生效, 跨域问题就会通过代理的请求转发解决.
// 生产环境下(服务器环境) 代理文件 setupProxy.js 文件不存在了, 代理也就不生效了, 之后的跨域问题只能让后端在服务器端解决.

//实例化axios对象
var service = axios.create({
    // baseURL:'/api',//基准路径, 实际发请求时, 每个请求地址前都会自动拼接上该基准路径
    // baseURL:'http://cdf.yantianfeng.com/api',//基准路径, 实际发请求时, 每个请求地址前都会自动拼接上该基准路径
    baseURL: process.env.REACT_APP_BASE_URL ,
    timeout: 10*1000, //超时时间
})

//设置请求拦截器
service.interceptors.request.use(
    (config)=>{
        //一般情况下,在这里设置请求头( 这些请求头应该是服务端必须要求携带的 )
        //config.headers['Authorization'] = "Bearer" + " " + localStorage.getItem('token');
        config.headers.Authorization = "Bearer" + " " + localStorage.getItem('token');
    
        return config;
    },
    
    (err)=>{
        return Promise.reject(err)
    },
)

//设置响应拦截器
service.interceptors.response.use(
    (res)=>{
        return res;
    },
    
    (err)=>{
        //一般情况下, 在这里处理服务端返回的错误码

        // if( err.response.status == 401 ){
        //     alert('身份验证失败,登陆过期,请重新登录');
        //     //跳转到登录页
        //     //删除过期的token
        // }
        // else if( err.response.status == 404 ) {
        //     alert('访问路径有误!');
        // }
        // else if( err.response.status == 500 ) {
        //     alert('服务器内部错误!');
        // }

        return Promise.reject(err)
    },
)

export default service;
